From 1eb96eadfc3349534617082f3bb5dd8be2f3a99a Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Tue, 15 Jul 2008 17:34:34 +0000 Subject: [PATCH] =?utf8?q?=20=20=20=20=20=20=20=20Bug=20384940=20=E2=80=93?= =?utf8?q?=20handle=20rejecting=20jobs=20and=20authentication=20meaningful?= =?utf8?q?ly?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Patch by Marek Kasik, icons by Mike Langlie: * gtk/gtk.symbols: * gtk/gtkprintbackend.h: * gtk/gtkprinter.[hc]: Add new paused and accepting-jobs properties and getters/setters. * gtk/gtkstock.h: * gtk/gtkiconfactory.c: * gtk/Makefile.am: * gtk/stock-icons/{16,24}/gtk-print-paused.{png,svg}: New icon. * modules/printbackends/cups/gtkprintbackendcups.c: * gtk/gtkprintunixdialog.c: Handle paused and job-rejecting printers. svn path=/trunk/; revision=20838 --- ChangeLog | 19 + docs/reference/ChangeLog | 7 + docs/reference/gtk/Makefile.am | 1 + docs/reference/gtk/gtk-sections.txt | 2 + docs/reference/gtk/tmpl/gtkstock.sgml | 15 +- gtk/Makefile.am | 2 + gtk/gtk.symbols | 4 + gtk/gtkiconfactory.c | 1 + gtk/gtkprintbackend.h | 50 +- gtk/gtkprinter.c | 132 ++++- gtk/gtkprinter.h | 2 + gtk/gtkprintunixdialog.c | 67 ++- gtk/gtkstock.h | 1 + gtk/stock-icons/16/gtk-print-paused.png | Bin 0 -> 689 bytes gtk/stock-icons/16/gtk-print-paused.svg | 490 ++++++++++++++++++ gtk/stock-icons/24/gtk-print-paused.png | Bin 0 -> 1096 bytes gtk/stock-icons/24/gtk-print-paused.svg | 460 ++++++++++++++++ .../printbackends/cups/gtkprintbackendcups.c | 41 +- 18 files changed, 1252 insertions(+), 42 deletions(-) create mode 100644 gtk/stock-icons/16/gtk-print-paused.png create mode 100644 gtk/stock-icons/16/gtk-print-paused.svg create mode 100644 gtk/stock-icons/24/gtk-print-paused.png create mode 100644 gtk/stock-icons/24/gtk-print-paused.svg diff --git a/ChangeLog b/ChangeLog index 411220f01d..4fd4a805a5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,22 @@ +2008-07-15 Matthias Clasen + + Bug 384940 – handle rejecting jobs and authentication meaningfully + + Patch by Marek Kasik, icons by Mike Langlie: + * gtk/gtk.symbols: + * gtk/gtkprintbackend.h: + * gtk/gtkprinter.[hc]: Add new paused and accepting-jobs properties + and getters/setters. + + * gtk/gtkstock.h: + * gtk/gtkiconfactory.c: + * gtk/Makefile.am: + * gtk/stock-icons/{16,24}/gtk-print-paused.{png,svg}: New icon. + + * modules/printbackends/cups/gtkprintbackendcups.c: + * gtk/gtkprintunixdialog.c: Handle paused and job-rejecting + printers. + 2008-07-15 Matthias Clasen * configure.in: Add a test to see if GIO can sniff image data, diff --git a/docs/reference/ChangeLog b/docs/reference/ChangeLog index fffa719c57..ecbd7f0bcd 100644 --- a/docs/reference/ChangeLog +++ b/docs/reference/ChangeLog @@ -1,3 +1,10 @@ +2008-07-15 Matthias Clasen + + * gtk/Makefile.am: + * gtk/tmpl/gtkstock.sgml: Add new icon. + + * gtk/gtk-sections.txt: Add new GtkPrinter functions + 2008-07-14 Matthias Clasen * gtk/tmpl/gtklabel.sgml: Fix markup diff --git a/docs/reference/gtk/Makefile.am b/docs/reference/gtk/Makefile.am index fa75b47516..16155f4dcd 100644 --- a/docs/reference/gtk/Makefile.am +++ b/docs/reference/gtk/Makefile.am @@ -242,6 +242,7 @@ HTML_IMAGES = \ $(top_srcdir)/gtk/stock-icons/24/gtk-preferences.png \ $(top_srcdir)/gtk/stock-icons/24/gtk-print.png \ $(top_srcdir)/gtk/stock-icons/24/gtk-print-error.png \ + $(top_srcdir)/gtk/stock-icons/24/gtk-print-paused.png \ $(top_srcdir)/gtk/stock-icons/24/gtk-print-preview.png \ $(top_srcdir)/gtk/stock-icons/24/gtk-print-report.png \ $(top_srcdir)/gtk/stock-icons/24/gtk-print-warning.png \ diff --git a/docs/reference/gtk/gtk-sections.txt b/docs/reference/gtk/gtk-sections.txt index 84638857f7..6c5d9a1a4b 100644 --- a/docs/reference/gtk/gtk-sections.txt +++ b/docs/reference/gtk/gtk-sections.txt @@ -6441,6 +6441,8 @@ gtk_printer_get_location gtk_printer_get_icon_name gtk_printer_get_job_count gtk_printer_is_active +gtk_printer_is_paused +gtk_printer_is_accepting_jobs gtk_printer_is_virtual gtk_printer_is_default gtk_printer_accepts_ps diff --git a/docs/reference/gtk/tmpl/gtkstock.sgml b/docs/reference/gtk/tmpl/gtkstock.sgml index c287359385..65e6a509b9 100644 --- a/docs/reference/gtk/tmpl/gtkstock.sgml +++ b/docs/reference/gtk/tmpl/gtkstock.sgml @@ -755,13 +755,22 @@ The "Print" item. -The "Print Error" item. +The "Print Error" icon. @Since: 2.14 + + +The "Print Paused" icon. + + + +@Since: 2.14 + + The "Print Preview" item. @@ -772,7 +781,7 @@ The "Print Preview" item. -The "Print Report" item. +The "Print Report" icon. @@ -781,7 +790,7 @@ The "Print Report" item. -The "Print Warning" item. +The "Print Warning" icon. diff --git a/gtk/Makefile.am b/gtk/Makefile.am index 052dabfed3..cc07d4d4c2 100644 --- a/gtk/Makefile.am +++ b/gtk/Makefile.am @@ -1000,6 +1000,7 @@ STOCK_ICONS = \ stock-icons/16/gtk-preferences.png \ stock-icons/16/gtk-print.png \ stock-icons/16/gtk-print-error.png \ + stock-icons/16/gtk-print-paused.png \ stock-icons/16/gtk-print-preview.png \ stock-icons/16/gtk-print-report.png \ stock-icons/16/gtk-print-warning.png \ @@ -1109,6 +1110,7 @@ STOCK_ICONS = \ stock-icons/24/gtk-preferences.png \ stock-icons/24/gtk-print.png \ stock-icons/24/gtk-print-error.png \ + stock-icons/24/gtk-print-paused.png \ stock-icons/24/gtk-print-preview.png \ stock-icons/24/gtk-print-report.png \ stock-icons/24/gtk-print-warning.png \ diff --git a/gtk/gtk.symbols b/gtk/gtk.symbols index 9a25a78726..ad6f331b21 100644 --- a/gtk/gtk.symbols +++ b/gtk/gtk.symbols @@ -2691,12 +2691,16 @@ gtk_printer_set_description gtk_printer_set_has_details gtk_printer_set_icon_name gtk_printer_set_is_active +gtk_printer_set_is_paused +gtk_printer_set_is_accepting_jobs gtk_printer_set_is_default gtk_printer_set_is_new gtk_printer_set_job_count gtk_printer_set_location gtk_printer_set_state_message gtk_printer_is_active +gtk_printer_is_paused +gtk_printer_is_accepting_jobs gtk_printer_is_new gtk_printer_is_default #endif diff --git a/gtk/gtkiconfactory.c b/gtk/gtkiconfactory.c index 6bcc09f9c3..43773e4f91 100644 --- a/gtk/gtkiconfactory.c +++ b/gtk/gtkiconfactory.c @@ -452,6 +452,7 @@ get_default_icons (GtkIconFactory *factory) register_stock_icon (factory, GTK_STOCK_PREFERENCES); register_stock_icon (factory, GTK_STOCK_PRINT); register_stock_icon (factory, GTK_STOCK_PRINT_ERROR); + register_stock_icon (factory, GTK_STOCK_PRINT_PAUSED); register_stock_icon (factory, GTK_STOCK_PRINT_PREVIEW); register_stock_icon (factory, GTK_STOCK_PRINT_REPORT); register_stock_icon (factory, GTK_STOCK_PRINT_WARNING); diff --git a/gtk/gtkprintbackend.h b/gtk/gtkprintbackend.h index a33f6d80fe..389ef00a53 100644 --- a/gtk/gtkprintbackend.h +++ b/gtk/gtkprintbackend.h @@ -149,30 +149,32 @@ void gtk_print_backend_set_list_done (GtkPrintBackend *bac /* Backend-only functions for GtkPrinter */ -GtkPrinter *gtk_printer_new (const char *name, - GtkPrintBackend *backend, - gboolean is_virtual); -gboolean gtk_printer_is_new (GtkPrinter *printer); -void gtk_printer_set_is_new (GtkPrinter *printer, - gboolean val); -void gtk_printer_set_is_active (GtkPrinter *printer, - gboolean val); -void gtk_printer_set_has_details (GtkPrinter *printer, - gboolean val); -void gtk_printer_set_is_default (GtkPrinter *printer, - gboolean val); -void gtk_printer_set_icon_name (GtkPrinter *printer, - const gchar *icon); -gboolean gtk_printer_set_job_count (GtkPrinter *printer, - gint count); -gboolean gtk_printer_set_location (GtkPrinter *printer, - const gchar *location); -gboolean gtk_printer_set_description (GtkPrinter *printer, - const gchar *description); -gboolean gtk_printer_set_state_message (GtkPrinter *printer, - const gchar *message); -void gtk_printer_set_is_active (GtkPrinter *printer, - gboolean active); +GtkPrinter *gtk_printer_new (const char *name, + GtkPrintBackend *backend, + gboolean is_virtual); +gboolean gtk_printer_is_new (GtkPrinter *printer); +void gtk_printer_set_is_new (GtkPrinter *printer, + gboolean val); +void gtk_printer_set_is_active (GtkPrinter *printer, + gboolean val); +gboolean gtk_printer_set_is_paused (GtkPrinter *printer, + gboolean val); +gboolean gtk_printer_set_is_accepting_jobs (GtkPrinter *printer, + gboolean val); +void gtk_printer_set_has_details (GtkPrinter *printer, + gboolean val); +void gtk_printer_set_is_default (GtkPrinter *printer, + gboolean val); +void gtk_printer_set_icon_name (GtkPrinter *printer, + const gchar *icon); +gboolean gtk_printer_set_job_count (GtkPrinter *printer, + gint count); +gboolean gtk_printer_set_location (GtkPrinter *printer, + const gchar *location); +gboolean gtk_printer_set_description (GtkPrinter *printer, + const gchar *description); +gboolean gtk_printer_set_state_message (GtkPrinter *printer, + const gchar *message); G_END_DECLS diff --git a/gtk/gtkprinter.c b/gtk/gtkprinter.c index 1ce3ed55b1..96c0ec7815 100644 --- a/gtk/gtkprinter.c +++ b/gtk/gtkprinter.c @@ -43,13 +43,15 @@ struct _GtkPrinterPrivate gchar *description; gchar *icon_name; - guint is_active : 1; - guint is_new : 1; - guint is_virtual : 1; - guint is_default : 1; - guint has_details : 1; - guint accepts_pdf : 1; - guint accepts_ps : 1; + guint is_active : 1; + guint is_paused : 1; + guint is_accepting_jobs : 1; + guint is_new : 1; + guint is_virtual : 1; + guint is_default : 1; + guint has_details : 1; + guint accepts_pdf : 1; + guint accepts_ps : 1; gchar *state_message; gint job_count; @@ -72,7 +74,9 @@ enum { PROP_ICON_NAME, PROP_JOB_COUNT, PROP_ACCEPTS_PDF, - PROP_ACCEPTS_PS + PROP_ACCEPTS_PS, + PROP_PAUSED, + PROP_ACCEPTING_JOBS }; static guint signals[LAST_SIGNAL] = { 0 }; @@ -179,6 +183,37 @@ gtk_printer_class_init (GtkPrinterClass *class) 0, GTK_PARAM_READABLE)); + /** + * GtkPrinter:paused: + * + * This property is %TRUE if this printer is paused. + * A paused printer still accepts jobs, but it does + * not print them. + * + * Since: 2.14 + */ + g_object_class_install_property (G_OBJECT_CLASS (class), + PROP_PAUSED, + g_param_spec_boolean ("paused", + P_("Paused Printer"), + P_("TRUE if this printer is paused"), + FALSE, + GTK_PARAM_READABLE)); + /** + * GtkPrinter:accepting-jobs: + * + * This property is %TRUE if the printer is accepting jobs. + * + * Since: 2.14 + */ + g_object_class_install_property (G_OBJECT_CLASS (class), + PROP_ACCEPTING_JOBS, + g_param_spec_boolean ("accepting-jobs", + P_("Accepting Jobs"), + P_("TRUE if this printer is accepting new jobs"), + TRUE, + GTK_PARAM_READABLE)); + /** * GtkPrinter::details-acquired: * @printer: the #GtkPrinter on which the signal is emitted @@ -213,6 +248,8 @@ gtk_printer_init (GtkPrinter *printer) priv->icon_name = NULL; priv->is_active = TRUE; + priv->is_paused = FALSE; + priv->is_accepting_jobs = TRUE; priv->is_new = TRUE; priv->has_details = FALSE; priv->accepts_pdf = TRUE; @@ -327,6 +364,12 @@ gtk_printer_get_property (GObject *object, case PROP_ACCEPTS_PS: g_value_set_boolean (value, priv->accepts_ps); break; + case PROP_PAUSED: + g_value_set_boolean (value, priv->is_paused); + break; + case PROP_ACCEPTING_JOBS: + g_value_set_boolean (value, priv->is_accepting_jobs); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -635,6 +678,79 @@ gtk_printer_set_is_active (GtkPrinter *printer, printer->priv->is_active = val; } +/** + * gtk_printer_is_paused: + * @printer: a #GtkPrinter + * + * Returns whether the printer is currently paused. + * A paused printer still accepts jobs, but it is not + * printing them. + * + * Return value: %TRUE if @printer is paused + * + * Since: 2.14 + */ +gboolean +gtk_printer_is_paused (GtkPrinter *printer) +{ + g_return_val_if_fail (GTK_IS_PRINTER (printer), TRUE); + + return printer->priv->is_paused; +} + +gboolean +gtk_printer_set_is_paused (GtkPrinter *printer, + gboolean val) +{ + GtkPrinterPrivate *priv; + + g_return_val_if_fail (GTK_IS_PRINTER (printer), FALSE); + + priv = printer->priv; + + if (val == priv->is_paused) + return FALSE; + + priv->is_paused = val; + + return TRUE; +} + +/** + * gtk_printer_is_accepting_jobs: + * @printer: a #GtkPrinter + * + * Returns whether the printer is accepting jobs + * + * Return value: %TRUE if @printer is accepting jobs + * + * Since: 2.14 + */ +gboolean +gtk_printer_is_accepting_jobs (GtkPrinter *printer) +{ + g_return_val_if_fail (GTK_IS_PRINTER (printer), TRUE); + + return printer->priv->is_accepting_jobs; +} + +gboolean +gtk_printer_set_is_accepting_jobs (GtkPrinter *printer, + gboolean val) +{ + GtkPrinterPrivate *priv; + + g_return_val_if_fail (GTK_IS_PRINTER (printer), FALSE); + + priv = printer->priv; + + if (val == priv->is_accepting_jobs) + return FALSE; + + priv->is_accepting_jobs = val; + + return TRUE; +} /** * gtk_printer_is_virtual: diff --git a/gtk/gtkprinter.h b/gtk/gtkprinter.h index e3c8dd71b7..7b74da7261 100644 --- a/gtk/gtkprinter.h +++ b/gtk/gtkprinter.h @@ -99,6 +99,8 @@ G_CONST_RETURN gchar *gtk_printer_get_location (GtkPrinter *pri G_CONST_RETURN gchar *gtk_printer_get_icon_name (GtkPrinter *printer); gint gtk_printer_get_job_count (GtkPrinter *printer); gboolean gtk_printer_is_active (GtkPrinter *printer); +gboolean gtk_printer_is_paused (GtkPrinter *printer); +gboolean gtk_printer_is_accepting_jobs (GtkPrinter *printer); gboolean gtk_printer_is_virtual (GtkPrinter *printer); gboolean gtk_printer_is_default (GtkPrinter *printer); gboolean gtk_printer_accepts_pdf (GtkPrinter *printer); diff --git a/gtk/gtkprintunixdialog.c b/gtk/gtkprintunixdialog.c index 0c8d27b76a..783ea4454c 100644 --- a/gtk/gtkprintunixdialog.c +++ b/gtk/gtkprintunixdialog.c @@ -96,6 +96,12 @@ static gboolean dialog_get_collate (GtkPrintUnixDialog *dialog); static gboolean dialog_get_reverse (GtkPrintUnixDialog *dialog); static gint dialog_get_n_copies (GtkPrintUnixDialog *dialog); +static void set_cell_sensitivity_func (GtkTreeViewColumn *tree_column, + GtkCellRenderer *cell, + GtkTreeModel *model, + GtkTreeIter *iter, + gpointer data); + /* GtkBuildable */ static void gtk_print_unix_dialog_buildable_init (GtkBuildableIface *iface); static GObject *gtk_print_unix_dialog_buildable_get_internal_child (GtkBuildable *buildable, @@ -309,12 +315,12 @@ add_custom_button_to_dialog (GtkDialog *dialog, gtk_dialog_add_action_widget (GTK_DIALOG (dialog), button, response_id); } -/* Presents an overwrite confirmation dialog ("print to file" backend). +/* This function handles error messages before printing. */ static gboolean -overwrite_confirmation_dialog (GtkPrintUnixDialog *print_dialog, - gint print_dialog_response_id, - gpointer data) +error_dialogs (GtkPrintUnixDialog *print_dialog, + gint print_dialog_response_id, + gpointer data) { GtkPrintUnixDialogPrivate *priv = print_dialog->priv; GtkPrinterOption *option = NULL; @@ -330,6 +336,8 @@ overwrite_confirmation_dialog (GtkPrintUnixDialog *print_dialog, { printer = gtk_print_unix_dialog_get_selected_printer (print_dialog); + /* Shows overwrite confirmation dialog in the case of printing to file which + * already exists. */ if (printer != NULL && gtk_printer_is_virtual (printer)) { option = gtk_printer_option_set_lookup (priv->options, @@ -418,7 +426,7 @@ gtk_print_unix_dialog_init (GtkPrintUnixDialog *dialog) g_signal_connect (dialog, "response", - (GCallback) overwrite_confirmation_dialog, + (GCallback) error_dialogs, NULL); priv->preview_button = gtk_button_new_from_stock (GTK_STOCK_PRINT_PREVIEW); @@ -568,6 +576,28 @@ gtk_print_unix_dialog_buildable_get_internal_child (GtkBuildable *buildable, return parent_buildable_iface->get_internal_child (buildable, builder, childname); } +/* This function controls "sensitive" property of GtkCellRenderer based on pause + * state of printers. */ +void set_cell_sensitivity_func (GtkTreeViewColumn *tree_column, + GtkCellRenderer *cell, + GtkTreeModel *tree_model, + GtkTreeIter *iter, + gpointer data) +{ + GtkPrinter *printer; + + gtk_tree_model_get (tree_model, iter, PRINTER_LIST_COL_PRINTER_OBJ, &printer, -1); + + if (printer != NULL && !gtk_printer_is_accepting_jobs (printer)) + g_object_set (cell, + "sensitive", FALSE, + NULL); + else + g_object_set (cell, + "sensitive", TRUE, + NULL); +} + static void printer_status_cb (GtkPrintBackend *backend, GtkPrinter *printer, @@ -575,6 +605,7 @@ printer_status_cb (GtkPrintBackend *backend, { GtkPrintUnixDialogPrivate *priv = dialog->priv; GtkTreeIter *iter; + GtkTreeSelection *selection; iter = g_object_get_data (G_OBJECT (printer), "gtk-print-tree-iter"); @@ -585,6 +616,10 @@ printer_status_cb (GtkPrintBackend *backend, PRINTER_LIST_COL_LOCATION, gtk_printer_get_location (printer), -1); + /* When the pause state change then we need to update sensitive property + * of GTK_RESPONSE_OK button inside of selected_printer_changed function. */ + selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->printer_treeview)); + selected_printer_changed (selection, dialog); } static void @@ -1410,6 +1445,21 @@ selected_printer_changed (GtkTreeSelection *selection, PRINTER_LIST_COL_PRINTER_OBJ, &printer, -1); } + + /* sets GTK_RESPONSE_OK button sensitive/insensitive depending on whether the printer + * accepts/rejects jobs */ + if (printer != NULL) + { + if (!gtk_printer_is_accepting_jobs (printer)) + { + gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog), GTK_RESPONSE_OK, FALSE); + } + else + { + if (priv->current_printer == printer && gtk_printer_has_details (printer)) + gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog), GTK_RESPONSE_OK, TRUE); + } + } if (printer != NULL && !gtk_printer_has_details (printer)) { @@ -1445,7 +1495,8 @@ selected_printer_changed (GtkTreeSelection *selection, priv->printer_capabilities = 0; - gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog), GTK_RESPONSE_OK, TRUE); + if (gtk_printer_is_accepting_jobs (printer)) + gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog), GTK_RESPONSE_OK, TRUE); priv->current_printer = printer; if (printer != NULL) @@ -1659,6 +1710,7 @@ create_main_page (GtkPrintUnixDialog *dialog) "icon-name", PRINTER_LIST_COL_ICON, NULL); + gtk_tree_view_column_set_cell_data_func (column, renderer, set_cell_sensitivity_func, NULL, NULL); gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column); renderer = gtk_cell_renderer_text_new (); @@ -1667,6 +1719,7 @@ create_main_page (GtkPrintUnixDialog *dialog) "text", PRINTER_LIST_COL_NAME, NULL); + gtk_tree_view_column_set_cell_data_func (column, renderer, set_cell_sensitivity_func, NULL, NULL); gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column); renderer = gtk_cell_renderer_text_new (); @@ -1675,6 +1728,7 @@ create_main_page (GtkPrintUnixDialog *dialog) "text", PRINTER_LIST_COL_LOCATION, NULL); + gtk_tree_view_column_set_cell_data_func (column, renderer, set_cell_sensitivity_func, NULL, NULL); gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column); renderer = gtk_cell_renderer_text_new (); @@ -1684,6 +1738,7 @@ create_main_page (GtkPrintUnixDialog *dialog) "text", PRINTER_LIST_COL_STATE, NULL); + gtk_tree_view_column_set_cell_data_func (column, renderer, set_cell_sensitivity_func, NULL, NULL); gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column); gtk_widget_show (treeview); diff --git a/gtk/gtkstock.h b/gtk/gtkstock.h index f259d89dec..8fef6d479a 100644 --- a/gtk/gtkstock.h +++ b/gtk/gtkstock.h @@ -148,6 +148,7 @@ void gtk_stock_set_translate_func (const gchar *domain, #define GTK_STOCK_PREFERENCES "gtk-preferences" #define GTK_STOCK_PRINT "gtk-print" #define GTK_STOCK_PRINT_ERROR "gtk-print-error" +#define GTK_STOCK_PRINT_PAUSED "gtk-print-paused" #define GTK_STOCK_PRINT_PREVIEW "gtk-print-preview" #define GTK_STOCK_PRINT_REPORT "gtk-print-report" #define GTK_STOCK_PRINT_WARNING "gtk-print-warning" diff --git a/gtk/stock-icons/16/gtk-print-paused.png b/gtk/stock-icons/16/gtk-print-paused.png new file mode 100644 index 0000000000000000000000000000000000000000..ebd5ac60c831a7db00cdedff0dc5273f58eecfde GIT binary patch literal 689 zcmV;i0#5yjP)Tz@P0M&GKt1l&Zf`(A7E!QDn2v_07#{VLkC0>k_eTGgVI_Fp69{N zX4Jy`q6qwQ3!$La1xfXu=!&XJv}{O2425eG1Y3dUs;y*WMt%IZz7SP z8{^jz1VMPYR9eHYpJk+yDa2wiEInRA`b-*HyZE;LRc&l+6qVJ8V?7-RA+BesW7O5OPj XU|JE!qPW1E00000NkvXXu0mjfm0T}a literal 0 HcmV?d00001 diff --git a/gtk/stock-icons/16/gtk-print-paused.svg b/gtk/stock-icons/16/gtk-print-paused.svg new file mode 100644 index 0000000000..fb492c8790 --- /dev/null +++ b/gtk/stock-icons/16/gtk-print-paused.svg @@ -0,0 +1,490 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/gtk/stock-icons/24/gtk-print-paused.png b/gtk/stock-icons/24/gtk-print-paused.png new file mode 100644 index 0000000000000000000000000000000000000000..da6df48a9e28f51b71d312aea70433f262fb5680 GIT binary patch literal 1096 zcmV-O1h@N%P)PbXFRCwC7Rb6NtRTTbaXLfcbX`tPt z#cTw%f%c(DAGDji*~H{UP$Z>kSwSgk0~Qe#qUf`Ksn80(D7Dmz^-WM?<3nm~wwBh^ z&?b^LB#?D?YsmgJO|rW)JAa-t`;)}%N^J1L;oNiX%sJorx#tRwqljZ{+hiXQRt73}@iu4~%NIsv>0MilQPu z7lp^;aY^)urMdTXrOIRKiy}iADrOr2g?3H7IbKiU|9C_hI=ml*hB_(c} zCI-)ck3=Gg9Zfsn_cx-xz8=|Z7MV;M(OA?m9dqF9>95|dIOyx^^J;qTN>9&$y{UA< zn@Xi>h8&B<@L8_V>v(M6<7o8z;aI?pn>QKzhoP54=UfMxu7%p$+A%XT z4N~1X|G4)PxH^U!b&EunZfI?%4~D{!(}Z?QL!H)oWK@lU5JC zNF-9zIL#WQ(ka)$(&9amE&dCR?YL*mS!R8Xnq%A6tvqI*t~hY#3w6TO)UB!xICaz^ z#XM^oXq>wRw;da%WfeKete0iE47;)7Kq3cTsVE+OsjrFy3va#CUqS=uMxIE6O~x~K zGcISD^_FFqVW%a!>cYW82OxSS(4*n1KR@+Z)hJ|1#`5wqBm$xr3U2>flpZZtI82js`y)Fau2EzY$z%#CqUo6#DuaMJwQk*a3-=Z< zpGYhXe)l66@;ax8D`G}xqXQRlv442j-d-yTj!>fx()EHHLBp0UkbORPWK+XZggGoN zWi!*ar$6OOPZZ|}yhLnt+p6IwY+z9Oh?LU*{GUOjmncVcmniwS00RK8eh8 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/printbackends/cups/gtkprintbackendcups.c b/modules/printbackends/cups/gtkprintbackendcups.c index 0aaf83e535..7be6434cde 100644 --- a/modules/printbackends/cups/gtkprintbackendcups.c +++ b/modules/printbackends/cups/gtkprintbackendcups.c @@ -1058,6 +1058,7 @@ cups_request_printer_list_cb (GtkPrintBackendCups *cups_backend, const gchar *reason_msg = NULL; gchar *reason_msg_desc = NULL; gchar *tmp_msg = NULL; + gchar *tmp_msg2 = NULL; gint printer_state_reason_level = 0; /* 0 - none, 1 - report, 2 - warning, 3 - error */ gboolean interested_in = FALSE; gboolean found = FALSE; @@ -1093,6 +1094,8 @@ cups_request_printer_list_cb (GtkPrintBackendCups *cups_backend, N_("Printer '%s' may not be connected."), N_("There is a problem on printer '%s'.") }; + gboolean is_paused = FALSE; + gboolean is_accepting_jobs = TRUE; /* Skip leading attributes until we hit a printer... */ @@ -1127,6 +1130,12 @@ cups_request_printer_list_cb (GtkPrintBackendCups *cups_backend, { if (strcmp (attr->values[i].string.text, "none") != 0) { + /* Sets is_paused flag for paused printer. */ + if (strcmp (attr->values[i].string.text, "paused") == 0) + { + is_paused = TRUE; + } + interested_in = FALSE; for (j = 0; j < G_N_ELEMENTS (reasons); j++) if (strncmp (attr->values[i].string.text, reasons[j], strlen (reasons[j])) == 0) @@ -1166,6 +1175,13 @@ cups_request_printer_list_cb (GtkPrintBackendCups *cups_backend, state = attr->values[0].integer; else if (strcmp (attr->name, "queued-job-count") == 0) job_count = attr->values[0].integer; + else if (strcmp (attr->name, "printer-is-accepting-jobs") == 0) + { + if (attr->values[0].boolean == 1) + is_accepting_jobs = TRUE; + else + is_accepting_jobs = FALSE; + } else { GTK_NOTE (PRINTING, @@ -1262,6 +1278,9 @@ cups_request_printer_list_cb (GtkPrintBackendCups *cups_backend, else g_object_ref (printer); + gtk_printer_set_is_paused (printer, is_paused); + gtk_printer_set_is_accepting_jobs (printer, is_accepting_jobs); + if (!gtk_printer_is_active (printer)) { gtk_printer_set_is_active (printer, TRUE); @@ -1288,6 +1307,19 @@ cups_request_printer_list_cb (GtkPrintBackendCups *cups_backend, status_changed |= gtk_printer_set_location (printer, location); status_changed |= gtk_printer_set_description (printer, description); + if (state_msg != NULL && strlen (state_msg) == 0) + { + if (is_paused && !is_accepting_jobs) + tmp_msg2 = g_strdup ( N_("Paused ; Rejecting Jobs")); + if (is_paused && is_accepting_jobs) + tmp_msg2 = g_strdup ( N_("Paused")); + if (!is_paused && !is_accepting_jobs) + tmp_msg2 = g_strdup ( N_("Rejecting Jobs")); + + if (tmp_msg2 != NULL) + state_msg = tmp_msg2; + } + /* Set description of the reason and combine it with printer-state-message. */ if ( (reason_msg != NULL)) { @@ -1317,10 +1349,14 @@ cups_request_printer_list_cb (GtkPrintBackendCups *cups_backend, } status_changed |= gtk_printer_set_state_message (printer, state_msg); + status_changed |= gtk_printer_set_is_accepting_jobs (printer, is_accepting_jobs); if (tmp_msg != NULL) g_free (tmp_msg); + if (tmp_msg2 != NULL) + g_free (tmp_msg2); + if (reason_msg_desc != NULL) g_free (reason_msg_desc); @@ -1330,6 +1366,8 @@ cups_request_printer_list_cb (GtkPrintBackendCups *cups_backend, gtk_printer_set_icon_name (printer, "gtk-print-error"); else if (printer_state_reason_level == 2) gtk_printer_set_icon_name (printer, "gtk-print-warning"); + else if (gtk_printer_is_paused (printer)) + gtk_printer_set_icon_name (printer, "gtk-print-paused"); else gtk_printer_set_icon_name (printer, "gtk-print"); @@ -1376,7 +1414,8 @@ cups_request_printer_list (GtkPrintBackendCups *cups_backend) "printer-state-message", "printer-state-reasons", "printer-state", - "queued-job-count" + "queued-job-count", + "printer-is-accepting-jobs" }; if (cups_backend->list_printers_pending || -- 2.30.2